﻿using Newtonsoft.Json;

namespace Fadada.FASC.SDK.DotNetCore.Model
{
    public class RespCorpGetIdentityProcessInfo
    {
        /// <summary>
        /// 企业实名认证进度。如果当前有多条正在进行的实名认证进程，则都返回。如果有生效的实名认证进程，则只需返回最后生效的。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "identProgressInfos", Required = Required.AllowNull)]
        public CorpIdentProgressInfo[] IdentProgressInfos { get; set; }
    }

    public class CorpIdentProgressInfo
    {
        /// <summary>
        /// 企业实名认证状态：
        /// no_start: 未认证
        /// identifying: 认证中
        /// checking: 审核中
        /// checked: 初审通过
        /// success: 认证通过
        /// failed: 认证不通过。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentProcessStatus", Required = Required.Always)]
        public string CorpIdentProcessStatus { get; set; }

        /// <summary>
        /// 企业实名状态更新时间，以便了解该实名认证进程是多久以前的发生的事情。格式为：Unix标准时间戳，精确到毫秒。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentUpdateTime", Required = Required.Always)]
        public string CorpIdentUpdateTime { get; set; }

        /// <summary>
        /// 企业实名认证时所选择的认证方案：legal_rep: 法定代表人身份认证(企业经办人为法定代表人时，可选法定代表人身份认证)
        /// deputy_auth: 法定代表人授权认证(企业经办人为代理人时，可选法定代表人授权认证)payment: 企业对公账户认证(使用企业在银行开立的对公账户验证并通过打款验证其关系)
        /// offline: 纸质材料审核认证(企业线上提供资料提交进行预审，并在线下提供材料进行审核，周期较长)。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentMethod", Required = Required.AllowNull)]
        public string CorpIdentMethod { get; set; }

        /// <summary>
        /// 如果corpIdentProcessStatus是认证不通过，则该参数可能可以说明原因。特别是当人工审核不通过时，主要通过该参数返回不通过的原因。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentFailedReason", Required = Required.AllowNull)]
        public string CorpIdentFailedReason { get; set; }

        /// <summary>
        /// 企业实名认证经办人的openUserId。长度最大64个字符。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorId", Required = Required.Always)]
        public string OperatorId { get; set; }

        /// <summary>
        /// 企业经办人实名认证状态：
        /// no_start: 未认证
        /// identifying: 认证中
        /// checking: 审核中
        /// success: 认证通过
        /// failed: 认证不通过。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorIdentProcessStatus", Required = Required.Always)]
        public string OperatorIdentProcessStatus { get; set; }

        /// <summary>
        /// 企业经办人实名认证时所选择的认证方案：
        /// 企业经办人实名认证时所选择的认证方案：
        /// mobile: 实名手机号认证 (该方案校验的是企业经办人在电信运营商绑定的真实姓名、身份证号码、手机号及对应的短信验证码)
        /// face: 人脸识别认证 (该方案校验的是企业经办人的真实姓名、身份证号码和人脸比对)
        /// bank: 个人银行卡认证 (该方案校验的是企业经办人在银行绑定的真实姓名、身份证号码、银行卡卡号、预留在银行的手机号及对应的短信验证码)
        /// offline: 人工审核认证 (该方案主要为特殊人群提供的人工审核通道，如部分企业经办人因为特殊原因，无法在其他方案下完成认证。例如：手机不可用、人脸比对不成功、外国人等)。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorIdentMethod", Required = Required.Always)]
        public string OperatorIdentMethod { get; set; }

        /// <summary>
        /// 如果operatorIdentProcessStatus是认证不通过，则该参数可能可以说明原因。特别是当人工审核不通过时，主要通过该参数返回不通过的原因。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorIdentFailedReason", Required = Required.AllowNull)]
        public string OperatorIdentFailedReason { get; set; }
    }
}